home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / win / vb / multdll.exe / MULTISEL.C < prev   
Encoding:
C/C++ Source or Header  |  1992-06-26  |  4.4 KB  |  180 lines

  1. /***************************MULTI.DLL*************************************
  2. *                                     *
  3. *    Author: Jeff Simms     72200,3173     Date: June 25, 1992         *
  4. *                                     *
  5. *    Idea for DLL came from the MultiPik demo - author Costas Kitsos     *
  6. *                                     *
  7. *    Compiled under MS C7 Compact Model       .def and .h files at end     *
  8. **************************************************************************/
  9.  
  10. #include <windows.h>
  11. #include "multisel.h"
  12.  
  13. int s[1];
  14. char text[250];
  15. FARPROC lpfnOldListProc;
  16. HWND hListWnd;
  17. HWND lbhwnd;
  18.  
  19. int FAR PASCAL LibMain( HANDLE hInstance, WORD wDataSegment,
  20.                    WORD wHeapSize, LPSTR lpszCmdLine )
  21. {
  22.     if ( wHeapSize != 0 )
  23.     UnlockData( 0 );
  24.     return 1;
  25. }
  26.  
  27. int FAR PASCAL WEP (int bSystemExit)
  28. {
  29.     return (1);
  30. }
  31.  
  32.   int __export FAR PASCAL MultiListBox(HWND lbhWnd, HWND lbParent, DWORD MulSel)
  33.  
  34. {
  35.  
  36.  
  37.   HANDLE hInst;
  38.   POINT Lpoint;
  39.   RECT LBRect;
  40.   int X,Y,nWidth,nHeight;
  41.  
  42.   if (!MulSel)
  43.     MulSel = 0x54A108CA;
  44.  
  45.   hInst = GetWindowWord(lbParent, GWW_HINSTANCE);
  46.  
  47.   lbhwnd = lbhWnd;
  48.  
  49.   GetWindowRect(lbhwnd,&LBRect);
  50.   Lpoint.x = LBRect.left;
  51.   Lpoint.y = LBRect.top;
  52.   ScreenToClient(lbParent,&Lpoint);
  53.   X = Lpoint.x;
  54.   Y = Lpoint.y;
  55.  
  56.    nWidth = (LBRect.right - LBRect.left);
  57.    nHeight = (LBRect.bottom - LBRect.top);
  58.  
  59.    hListWnd = CreateWindow ("listbox", NULL, MulSel,
  60.          X, Y, nWidth, nHeight, lbParent, 257, hInst, NULL);
  61.  
  62.    lpfnOldListProc = (FARPROC) SetWindowLong(hListWnd,GWL_WNDPROC,(DWORD)(FARPROC)SubListFunc);
  63.  
  64.      return hListWnd ;
  65.  
  66.  }
  67.  
  68.  LONG __export FAR PASCAL SubListFunc(HWND hWnd,WORD Message,WORD wParam,LONG lParam)
  69.  
  70.  {
  71.  
  72.    if (Message == WM_LBUTTONDBLCLK)
  73.    {
  74.     SendMessage(hListWnd,LB_GETSELITEMS,1,(LONG) (LPSTR) s);
  75.     SendMessage(hListWnd,LB_GETTEXT, s[0],(LONG) (LPSTR) text);
  76.     SendMessage(lbhwnd,Message,wParam,lParam);
  77.     SendMessage(lbhwnd,LB_ADDSTRING,0, (LONG) (LPSTR) text);
  78.     }
  79.  
  80.   return CallWindowProc(lpfnOldListProc,hWnd,Message,wParam,lParam);
  81.  
  82.  }
  83.  
  84.  
  85.   void __export FAR PASCAL MultiGetSel(HWND lbhandle)
  86.  
  87.  {
  88.    int i,nCount,lpItems[1000];
  89.      nCount = (WORD)SendMessage(hListWnd,LB_GETSELITEMS,1000, (LONG) lpItems);
  90.  
  91.     for (i = 0; i < nCount; i++)
  92.     {
  93.     SendMessage(hListWnd,LB_GETTEXT, lpItems[i], (LONG) (LPSTR) text);
  94.     SendMessage(lbhandle,LB_ADDSTRING,0, (LONG) (LPSTR) text);
  95.     }
  96.  }
  97.  
  98.   void __export FAR PASCAL MultiAdd(LPSTR lpString)
  99.  {
  100.     SendMessage(hListWnd,LB_ADDSTRING,0, (LONG) lpString);
  101.  }
  102.  
  103.   void __export FAR PASCAL MultiReset(WORD wNata)
  104.  {
  105.     SendMessage(hListWnd,LB_RESETCONTENT,0,0);
  106.  }
  107.  
  108.   void __export FAR PASCAL MultiDelete(WORD nIndex)
  109.  {
  110.     SendMessage(hListWnd,LB_DELETESTRING, nIndex, 0);
  111.  }
  112.  
  113.   int __export FAR PASCAL MultiCount()
  114.  {
  115.     int nCount;
  116.     nCount = (WORD)SendMessage(hListWnd,LB_GETCOUNT, 0, 0);
  117.     return nCount;
  118.  }
  119.  
  120.   void __export FAR PASCAL MultiText(WORD nIndex)
  121.  {
  122.       SendMessage(hListWnd,LB_GETTEXT, nIndex, (LONG) (LPSTR) text);
  123.       SendMessage(lbhwnd,LB_ADDSTRING,0, (LONG) (LPSTR) text);
  124.  }
  125.  
  126.   void __export FAR PASCAL MultiSetTop(WORD nIndex)
  127.  {
  128.     SendMessage(hListWnd,LB_SETTOPINDEX, nIndex, 0);
  129.  }
  130.  
  131.   void __export FAR PASCAL MultiSetSel(WORD nSet, WORD nIndex)
  132.  {
  133.        SendMessage(hListWnd,LB_SETSEL, nSet, nIndex);
  134.  }
  135.  
  136.   int __export FAR PASCAL MultiFind(WORD nIndex,LPSTR lpString)
  137.  {
  138.     int nMatch;
  139.     nMatch = (WORD)SendMessage(hListWnd,LB_FINDSTRING, nIndex, (LONG) (LPSTR) lpString);
  140.     return    nMatch ;
  141.  }
  142.  
  143. /*           MULTI.DEF
  144.  
  145. LIBRARY           MULTI
  146. DESCRIPTION    'MULTIPLE SELECTION LISTBOX DLL'
  147. EXETYPE        WINDOWS
  148. CODE           PRELOAD MOVEABLE DISCARDABLE
  149. DATA           PRELOAD MOVEABLE SINGLE
  150. HEAPSIZE       1024
  151. EXPORTS        WEP
  152.            MultiListBox
  153.            SubListFunc
  154.            MultiGetSel
  155.            MultiAdd
  156.            MultiReset
  157.            MultiDelete
  158.            MultiCount
  159.            MultiText
  160.            MultiSetTop
  161.            MultiSetSel
  162.            MultiFind
  163. */
  164.  
  165. /*           MULTISEL.H
  166.  
  167. int __export FAR PASCAL MultiListBox(HWND,HWND,DWORD);
  168. LONG __export FAR PASCAL SubListFunc(HWND,WORD,WORD,LONG);
  169. void __export FAR PASCAL MultiGetSel(HWND);
  170. void __export FAR PASCAL MultiAdd(LPSTR);
  171. void __export FAR PASCAL MultiReset(WORD);
  172. void __export FAR PASCAL MultiDelete(WORD);
  173. int __export FAR PASCAL MultiCount();
  174. void __export FAR PASCAL MultiText(WORD);
  175. void __export FAR PASCAL MultiSetTop(WORD);
  176. void __export FAR PASCAL MultiSetSel(WORD,WORD);
  177. int __export FAR PASCAL MultiFind(WORD,LPSTR);
  178.  
  179. */
  180.